package com.baidu.push.example;

import static com.cmpsoft.mobile.plugin.pushnotification.PushNotification.ACTION_BINDED;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.util.Log;

import cn.clickmed.DaTong.DaTong;
import cn.clickmed.DaTong.R;
import cn.clickmed.getActivity.getActivity;

import com.baidu.android.pushservice.PushMessageReceiver;


public class MyPushMessageReceiver extends PushMessageReceiver {

    public static final Map<String, Integer> messageMap = new HashMap<String, Integer>();

    /**
     * TAG to Log
     */
    public static final String TAG = MyPushMessageReceiver.class.getSimpleName();

    public void onBind(Context context, int errorCode, String appid,
            String userId, String channelId, String requestId) {
        String responseString = "onBind errorCode=" + errorCode + " appid="
                + appid + " userId=" + userId + " channelId=" + channelId
                + " requestId=" + requestId;
        Log.d(TAG, responseString);

        // 绑定成功，设置已绑定flag，可以有效的减少不必要的绑定请求
        if (errorCode == 0) {
            Utils.setBind(context, true, appid, userId, channelId);
            context.sendBroadcast(new Intent(ACTION_BINDED));
        }
        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
//        updateContent(context, responseString);
    }

    public void onMessage(Context context, String message,
            String customContentString) {
        String messageString = "透传消息 message=\"" + message
                + "\" customContentString=" + customContentString;
        Log.e(TAG, messageString);

        // 自定义内容获取方式，mykey和myvalue对应透传消息推�?时自定义内容中设置的键和�?        if (!TextUtils.isEmpty
        // (customContentString)) {
        JSONObject customJson = null;
        try {
            customJson = new JSONObject(customContentString);
            String myvalue = null;
            if (customJson.isNull("mykey")) {
                myvalue = customJson.getString("mykey");
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 接收通知点击的函数。
     *
     * @param context             上下文
     * @param title               推送的通知的标题
     * @param description         推送的通知的描述
     * @param customContentString 自定义内容，为空或者json字符串
     */
    @Override
    public void onNotificationClicked(Context context, String title,
            String description, String customContentString) {
        NotificationManager manager = DaTong.notificationManager;

        Notification notification = new Notification();
        notification.icon = R.drawable.datong_icon;

        notification.when = System.currentTimeMillis();
        notification.number = 3;
        // 添加声音提示
        notification.defaults = Notification.DEFAULT_SOUND;
        // audioStreamType的�?必须AudioManager中的值，代表�?��铃的模式
        notification.audioStreamType = AudioManager.ADJUST_LOWER;
        Intent intent = new Intent(context, DaTong.class);
//		intent.putStringArrayListExtra("getDecInfo",decInfo);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                intent, 0);
        // 点击状�?栏的图标出现的提示信息设�?		notification.setLatestEventInfo(context, "2222222",
        // "333333333", pendingIntent);
        notification.flags = 1;
        manager.notify(1, notification);
    }

    /**
     * 接收通知到达的函数。
     *
     * @param context             上下文
     * @param title               推送的通知的标题
     * @param description         推送的通知的描述
     * @param customContentString 自定义内容，为空或者json字符串
     */
    @Override
    public void onNotificationArrived(Context context, String title,
            String description, String customContentString) {
        try {
            onNotification(context, title, customContentString);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    public void onNotification(Context context, String title, String customContentString)
            throws JSONException {

        NotificationManager manager = DaTong.notificationManager;
        Notification.Builder builder = new Notification.Builder(context);
        builder.setSmallIcon(R.drawable.datong_ic_launcher);

        JSONObject jsonObject = new JSONObject(customContentString);
        JSONObject jsonObjectD = (JSONObject) jsonObject.get("description");
        JSONObject jsonObjectC = (JSONObject) jsonObjectD.get("custom_content");
        String businessType = jsonObjectC.get("businessType").toString();
        String message = jsonObject.get("message").toString();

        if ("0001".equals(businessType)) {
            builder.setTicker("收文发文");
            builder.setContentTitle("收文发文");
        } else {
            builder.setTicker("待办任务");
            builder.setContentTitle("待办任务");
        }

        Integer number = 1;
        if (messageMap.containsKey(businessType)) {
            number = Integer.valueOf(messageMap.get(businessType)) + 1;
            messageMap.put(businessType, number);
        } else {
            messageMap.put(businessType, 1);
        }

        builder.setWhen(System.currentTimeMillis());
        builder.setNumber(number);
        if (number > 1) {
            builder.setDefaults(0);
        } else {
            builder.setDefaults(Notification.DEFAULT_SOUND);
        }
//        notification.audioStreamType = AudioManager.ADJUST_LOWER;

        Intent intent = new Intent(context, getActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("businessType", businessType);
        intent.putExtra("url", "file:///android_asset/www/views/dbrw/dbrw.html");
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 300, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setAutoCancel(true);
        builder.setContentText("您有" + number + "条待办，请注意查收。");
        builder.setContentIntent(pendingIntent);

        manager.notify(1, builder.build());
    }

    /**
     * setTags() 的回调函数。
     *
     * @param context     上下文
     * @param errorCode   错误码。0表示某些tag已经设置成功；非0表示所有tag的设置均失败。
     * @param successTags 设置成功的tag
     * @param failTags    设置失败的tag
     * @param requestId   分配给对云推送的请求的id
     */
    @Override
    public void onSetTags(Context context, int errorCode,
            List<String> sucessTags, List<String> failTags, String requestId) {
        String responseString = "onSetTags errorCode=" + errorCode
                + " sucessTags=" + sucessTags + " failTags=" + failTags
                + " requestId=" + requestId;
        Log.d(TAG, responseString);

        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
        updateContent(context, responseString);
    }

    /**
     * delTags() 的回调函数。
     *
     * @param context     上下文
     * @param errorCode   错误码。0表示某些tag已经删除成功；非0表示所有tag均删除失败。
     * @param successTags 成功删除的tag
     * @param failTags    删除失败的tag
     * @param requestId   分配给对云推送的请求的id
     */
    @Override
    public void onDelTags(Context context, int errorCode,
            List<String> sucessTags, List<String> failTags, String requestId) {
        String responseString = "onDelTags errorCode=" + errorCode
                + " sucessTags=" + sucessTags + " failTags=" + failTags
                + " requestId=" + requestId;
        Log.d(TAG, responseString);

        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
        updateContent(context, responseString);
    }

    /**
     * listTags() 的回调函数。
     *
     * @param context   上下文
     * @param errorCode 错误码。0表示列举tag成功；非0表示失败。
     * @param tags      当前应用设置的所有tag。
     * @param requestId 分配给对云推送的请求的id
     */
    @Override
    public void onListTags(Context context, int errorCode, List<String> tags,
            String requestId) {
        String responseString = "onListTags errorCode=" + errorCode + " tags="
                + tags;
        Log.d(TAG, responseString);

        // Demo更新界面展示代码，应用请在这里加入自己的处理逻辑
        updateContent(context, responseString);
    }

    /**
     * PushManager.stopWork() 的回调函数。
     *
     * @param context   上下文
     * @param errorCode 错误码。0表示从云推送解绑定成功；非0表示失败。
     * @param requestId 分配给对云推送的请求的id
     */
    public void onUnbind(Context context, int errorCode, String requestId) {
        String responseString = "onUnbind errorCode=" + errorCode
                + " requestId = " + requestId;
        Log.d(TAG, responseString);

        // 解绑定成功，设置未绑定flag�?        if (errorCode == 0) {
        Utils.setBind(context, false, null, null, null);
    }

    private void updateContent(Context context, String content) {
        Log.d(TAG, "updateContent");
        String logText = "" + Utils.logStringCache;

        if (!logText.equals("")) {
            logText += "\n";
        }

        SimpleDateFormat sDateFormat = new SimpleDateFormat("HH-mm-ss");
        logText += sDateFormat.format(new Date()) + ": ";
        logText += content;

        Utils.logStringCache = logText;

        Intent intent = new Intent();
        intent.setClass(context.getApplicationContext(), DaTong.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.getApplicationContext().startActivity(intent);
    }
}
